/*
002:         * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003:         *
004:         * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005:         *
006:         * The contents of this file are subject to the terms of either the GNU
007:         * General Public License Version 2 only ("GPL") or the Common
008:         * Development and Distribution License("CDDL") (collectively, the
009:         * "License"). You may not use this file except in compliance with the
010:         * License. You can obtain a copy of the License at
011:         * http://www.netbeans.org/cddl-gplv2.html
012:         * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013:         * specific language governing permissions and limitations under the
014:         * License.  When distributing the software, include this License Header
015:         * Notice in each file and include the License file at
016:         * nbbuild/licenses/CDDL-GPL-2-CP.  Sun designates this
017:         * particular file as subject to the "Classpath" exception as provided
018:         * by Sun in the GPL Version 2 section of the License file that
019:         * accompanied this code. If applicable, add the following below the
020:         * License Header, with the fields enclosed by brackets [] replaced by
021:         * your own identifying information:
022:         * "Portions Copyrighted [year] [name of copyright owner]"
023:         *
024:         * Contributor(s):
025:         *
026:         * The Original Software is NetBeans. The Initial Developer of the Original
027:         * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
028:         * Microsystems, Inc. All Rights Reserved.
029:         *
030:         * If you wish your version of this file to be governed by only the CDDL
031:         * or only the GPL Version 2, indicate your decision by adding
032:         * "[Contributor] elects to include this software in this distribution
033:         * under the [CDDL or GPL Version 2] license." If you do not indicate a
034:         * single choice of license, a recipient has the option to distribute
035:         * your version of this file under either the CDDL, the GPL Version 2 or
036:         * to extend the choice of license to its licensees as provided above.
037:         * However, if you add GPL Version 2 code and therefore, elected the GPL
038:         * Version 2 license, then the option applies only if the new code is
039:         * made subject to such option by the copyright holder.
040:         */
package org.gac.gacmod.visual;

import org.netbeans.api.visual.anchor.AnchorShape;

import java.awt.geom.GeneralPath;
import java.awt.*;

/**
 * @author David Kaspar
 */
public class StraightArrow implements AnchorShape
{

    public static final Stroke STROKE = new BasicStroke(1.0f,
            BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND);
    private int size;
    private boolean filled;
    private boolean hollow;
    private double cutDistance;
    private GeneralPath generalPath;
    private double marginOut = 2.0;

    /**
     * Creates a triangular anchor shape.
     * @param size the size of triangle
     * @param filled if true, then the triangle is filled
     * @param output if true, then it is output triangle
     * @param cutDistance the cut distance
     */
    public StraightArrow(int size, boolean filled,
            boolean output, boolean hollow, double cutDistance)
    {
        this.size = size;
        this.filled = filled;
        this.hollow = hollow;
        this.cutDistance = cutDistance;

        float side = size * 0.3f;
        generalPath = new GeneralPath();
        if (output)
        {
            generalPath.moveTo(size + marginOut, 0.0f);
            generalPath.lineTo(marginOut, -side);
            generalPath.lineTo(marginOut, +side);
            if (hollow)
            {
                generalPath.lineTo(size, 0.0f);
            }
        } else
        {
            generalPath.moveTo(0.0f, 0.0f);
            generalPath.lineTo(size, -side);
            generalPath.lineTo(size, +side);
            if (hollow)
            {
                generalPath.lineTo(0.0f, 0.0f);
            }
        }
    }

    public boolean isLineOriented()
    {
        return true;
    }

    public int getRadius()
    {
        return (int) Math.ceil(1.5f * size);
    }

    public double getCutDistance()
    {
        return 0;
    }

    public void paint(Graphics2D graphics, boolean source)
    {
        if (filled)
        {
            graphics.fill(generalPath);
        } else
        {
            Stroke stroke = graphics.getStroke();
            graphics.setStroke(STROKE);
            graphics.draw(generalPath);
            graphics.setStroke(stroke);
        }
    }
}